package com.xcc.cloud.es.entity;

import lombok.Data;
import lombok.ToString;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;

import java.io.Serializable;

/**
 * 自定义类型，商品。
 * 让自定义的类型和ElasticSearch中的一个索引产生关联。
 * <p>
 * Document - spring data elasticsearch提供的注解， 描述类型，说明类型和索引的关系。
 * indexName - 对应的索引的名称。 必要属性。
 * shards - 创建索引时，设置的主分片数量。 默认5
 * replicas - 创建索引时，设置的副本分片数量。 默认1
 * type - 对应的类型的名称。
 */
@Data
@Document(indexName = "ego_item", shards = 3, replicas = 1,type = "item")
public class Item implements Serializable {

    /**
     * Id注解是Spring Data核心工程提供的，是所有的Spring Data二级子工程通用的。
     * 代表主键字段。
     */
    @Id
    private String id;

    /**
     * Field注解，描述实体类型中属性和ES索引中字段的关系。
     * 且可以为这个字段配置自定义映射mapping
     * 这个自定义映射必须通过代码逻辑调用设置映射的API才能生效。
     * name - 索引中对应的字段名称，默认和属性同名。<当前springdataes的版本没有name字段>
     * type - 索引中字段的类型，默认是FieldType.Auto，代表ES自动映射类型。
     * analyzer - 字段的分词器名称，默认是standard。
     * fielddata - 是否开启正向索引。默认关闭。
     *      默认只为文本类型的字段创建反向索引，提供快速搜索逻辑。
     *      fielddata设置为true，则会额外创建一个正向索引，支持排序。
     * index - 是否创建默认的反向索引或正向索引。 text文本类型字段默认创建反向索引，其他创建正向索引。
     *      没有索引，就不能作为搜索条件。
     */
    @Field( type = FieldType.Text, analyzer = "ik_max_word", fielddata = true)
    private String title;// 商品名称，需要中文分词，且偶尔需要排序， 常用搜索条件之一

    @Field( name = "sell_point",type = FieldType.Text, analyzer = "ik_max_word")
    private String sellPoint;// 卖点， 需要中文分词， 常用搜索条件之一

    @Field(type = FieldType.Long)
    private Long price;// 单价

    @Field(type = FieldType.Integer,index = false)
    private Integer num;// 库存
}
